package com.cty;


import com.cty.Repository.UserRepository;
import com.cty.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

@SpringBootTest(classes = Main.class)
public class testJpa {

    @Autowired
    private UserRepository userRepository;


    // 插入api的使用
    @Test
    public void testSave() {
//        User user = new User();
//        //没有数据库会自动创建数据库
//        user.setUserName("张三");
//        user.setPassword("123456");
//        //调用保存方法
//        User savedUser = userRepository.save(user);
//        // 返回的是保存的对象
//        System.out.println(savedUser);
        for(int i = 0;i < 20;i++) {
            User user = new User();
            //没有数据库会自动创建数据库
            user.setUserName("张三");
            user.setPassword("123456");
            //调用保存方法
            User savedUser = userRepository.save(user);
            // 返回的是保存的对象
            System.out.println(savedUser);
        }

    }

    // 查询api的使用
    @Test
    public void testQuery() {
        // 会获得一个userOptional的对象
        Optional<User> userOptional= userRepository.findById(1L);
        // 获得装载数据的实体类对象
        User user = userOptional.get();
        System.out.println(user);
    }

    // 查询多条数据
    @Test
    public void testFindAll() {
        // 查询多条数据
        userRepository.findAll().forEach(System.out::println);
    }

    // 查询数据总数
    @Test
    public void testCount() {
        System.out.println(userRepository.count());
    }


    @Test
    //根据id删除或者查询到一个实体然后删除
    public void testDeleteByIdAndDelete() {
        Optional<User> userOptional = userRepository.findById(1L);
        User user = userOptional.get();
        // 查到一个实体类对象 然后根据这个实体类对象删除 返回值为空
        userRepository.delete(user);

        userRepository.deleteById(2L);
    }


    @Test
    //根据一个id集合删除所有的数据 这个sql做的不好 循环的删除每一条数据
    public void testDeleteAllById() {
        List<Long> ids = Arrays.asList(3L,4L,5L,6L);
        // 返回值为空
        userRepository.deleteAllById(ids);
    }

    //测试根据id列表多条查询 根据user实体的列表查询
    @Test
    public void testFindAllAndDeleteAll() {
        List<Long> ids = Arrays.asList(7L,8L,9L,10L);
        //都是循环的效率不高
        // 循环查询效率不高
        List<User> users = userRepository.findAllById(ids);

        // 删除实体类的全部数据
        userRepository.deleteAll(users);

    }
}
